--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/ui/keys.py 2.0.1 (486a97e4) Text, 12.54 KB
T8b949e# Copyright (c) 2026 Mark Qvist - See LICENSE.md and README.md
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS
Tff7b72import T7ee787base64
Tff7b72import T7ee787threading
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dpTb4b4b4,Te6edf3sp
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Tff7b72from T7ee787kivymdT7ee787.T7ee787toast Tff7b72import Te6edf3toast
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3dark_theme_text_color
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3dark_theme_text_color
Tff7b72class T56d364KeysTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffkeys_screen Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffkeys_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffkeys_screen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_keys_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffapp Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffkeys_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffbind_clipboard_actionsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Te6edf3info1 Tff7b72= Ta5d6ff"Ta5d6ff[size=18dp][b]Encryption Keys[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Your primary encryption keys are stored in a Reticulum Identity within the Sideband app. If you want to backup this Identity for later use on this or another device, you can export it as a plain text blob, with the key data encoded in Base32 format. This will allow you to restore your address in Sideband or other LXMF clients at a later point.Tffea00\nTffea00\nTa5d6ff[b]Warning![/b] Anyone that gets access to the key data will be able to control your LXMF address, impersonate you, and read your messages. It is [b]extremely important[/b] that you keep the Identity data secure if you export it.Tffea00\nTffea00\nTa5d6ffBefore displaying or exporting your Identity data, make sure that no machine or person in your vicinity is able to see, copy or record your device screen or similar.Ta5d6ff"
Te6edf3info2 Tff7b72= Ta5d6ff"Ta5d6ff[size=18dp][b]Backup & Restore[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]You can backup your entire Sideband profile for import on a computer or other device. The exported backup archive will be saved in the downloads folder of your device. Please note that the exported archive contains all your messages, data and encryption keys. Take extreme care to keep this archive secure.Ta5d6ff"
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_shareTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info1
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffbackup_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info2
Tff7b72def Td2a8fftest_aTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffTEST ACTIONTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72def Td2a8ff_profile_backup_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787tarfile
Tff7b72import T7ee787plyer
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3file_ts_format
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Te6edf3output_path Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_downloads_dirTb4b4b4(Tb4b4b4)
Te6edf3time_str Tff7b72= Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Te6edf3file_ts_formatTb4b4b4, Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3target_file Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3output_pathTffd700}Ta5d6ff/sideband_backup_Tffd700{Te6edf3time_strTffd700}Ta5d6ff.tar.gzTa5d6ff"
Te6edf3tar Tff7b72= Te6edf3tarfileTff7b72.Td2a8ffopenTb4b4b4(Te6edf3target_fileTb4b4b4, Ta5d6ff"Ta5d6ffw:gzTa5d6ff"Tb4b4b4)
Te6edf3tarTff7b72.Td2a8ffaddTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffapp_dirTffd700}Ta5d6ff/app_storageTa5d6ff"Tb4b4b4, Te6edf3arcnameTff7b72=Ta5d6ff"Ta5d6ffSideband BackupTa5d6ff"Tb4b4b4)
Te6edf3tarTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffjobTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_backupTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffBackup doneTa5d6ff"Tb4b4b4)
Te6edf3ok_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6fffTa5d6ff"Ta5d6ffBackup has been saved to Tffd700{Te6edf3target_fileTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[Te6edf3ok_buttonTb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4: Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3ok_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3jobTb4b4b4, T79c0ff0.3Tb4b4b4)
Tff7b72def Td2a8ffprofile_backup_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_backupTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffCreating backup...Ta5d6ff"Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_profile_backup_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffidentity_display_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYour Identity key, in base32 format is as follows:Tffea00\nTffea00\nTa5d6ff[b]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/b]Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffidentity_copy_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3c_yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4, Te6edf3theme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4, Te6edf3line_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4, Te6edf3text_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4)
Te6edf3c_no_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo, go backTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3c_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]Caution![/b]Tffea00\nTffea00\nTa5d6ffYour Identity key will be copied to the system clipboard. Take extreme care that no untrusted app steals your key by reading the clipboard data. Clear the system clipboard immediately after pasting your key where you need it.Tffea00\nTffea00\nTa5d6ffAre you sure that you wish to proceed?Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3c_no_buttonTb4b4b4, Te6edf3c_yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffc_dl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffc_dl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYour Identity key was copied to the system clipboardTa5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3ClipboardTff7b72.Td2a8ffcopyTb4b4b4(Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3c_yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_yesTb4b4b4)
Te6edf3c_no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_noTb4b4b4)
Te6edf3c_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffidentity_share_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshare_textTb4b4b4(Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffidentity_restore_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3c_yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4, Te6edf3theme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4, Te6edf3line_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4, Te6edf3text_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4)
Te6edf3c_no_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo, go backTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3c_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]Caution![/b]Tffea00\nTffea00\nTa5d6ffYou are about to import a new Identity key into Sideband. The currently active key will be irreversibly destroyed, and you will loose your LXMF address if you have not already backed up your current Identity key.Tffea00\nTffea00\nTa5d6ffAre you sure that you wish to import the key?Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3c_no_buttonTb4b4b4, Te6edf3c_yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffc_dl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffc_dl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3b32_text Tff7b72= Tff7b72selfTff7b72.Td2a8ffkeys_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffkey_restore_textTff7b72.Td2a8fftext
Tff7b72tryTb4b4b4:
Te6edf3key_bytes Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb32decodeTb4b4b4(Te6edf3b32_textTb4b4b4)
Te6edf3new_id Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_bytesTb4b4b4(Te6edf3key_bytesTb4b4b4)
Tff7b72if Te6edf3new_id Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3new_idTff7b72.Td2a8ffto_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentity_pathTb4b4b4)
Te6edf3yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]The provided Identity key data was imported[/b]Tffea00\nTffea00\nTa5d6ffThe app will now exit. Please restart Sideband to use the new Identity.Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffquit_actionTb4b4b4(Te6edf3senderTff7b72=Tff7b72selfTb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]The provided Identity key data was not valid[/b]Tffea00\nTffea00\nTa5d6ffThe error reported by Reticulum was:Tffea00\nTffea00\nTa5d6ff[i]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/i]Tffea00\nTffea00\nTa5d6ffNo Identity was imported into Sideband.Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3c_yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_yesTb4b4b4)
Te6edf3c_no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_noTb4b4b4)
Te6edf3c_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3layout_keys_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffkeys_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffBackup & KeysTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.app.close_keys_action(self)],
Ta5d6ff ]
Ta5d6ff ScrollView:
Ta5d6ff id:keys_scrollview
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(35), dp(35), dp(35), dp(35)]
Ta5d6ff MDLabel:
Ta5d6ff id: backup_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_backup
Ta5d6ff icon: Ta5d6ff"Ta5d6ffhome-export-outlineTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffBackup Sideband ProfileTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.profile_backup_action(self)
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_restore
Ta5d6ff icon: Ta5d6ff"Ta5d6ffhome-import-outlineTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffRestore Sideband ProfileTa5d6ff"
Ta5d6ff disabled: True
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.profile_backup_action(self)
Ta5d6ff MDLabel:
Ta5d6ff id: keys_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_display
Ta5d6ff icon: Ta5d6ff"Ta5d6ffeyeTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffDisplay Identity KeyTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.identity_display_action(self)
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_copy
Ta5d6ff icon: Ta5d6ff"Ta5d6fffile-keyTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffCopy Key To ClipboardTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.identity_copy_action(self)
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_share
Ta5d6ff icon: Ta5d6ff"Ta5d6ffupload-lockTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffSend Key To Other AppTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.identity_share_action(self)
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff # spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(12), dp(0), dp(0)]
Ta5d6ff MDTextField:
Ta5d6ff id: key_restore_text
Ta5d6ff hint_text: Ta5d6ff"Ta5d6ffEnter base32 key for importTa5d6ff"
Ta5d6ff mode: Ta5d6ff"Ta5d6ffrectangleTa5d6ff"
Ta5d6ff # size_hint: [1.0, None]
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_xTa5d6ff"Ta5d6ff: .5}
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: keys_restore
Ta5d6ff icon: Ta5d6ff"Ta5d6ffdownload-lockTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffRestore Identity From KeyTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.app.identity_restore_action(self)
Ta5d6ff"""
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────